package models

import (
	"encoding/xml"
	"math/big"
)

type ReqCcbPayParams struct {
	AppId          string    `json:"app_id" binding:"required"`
	DeviceInfo     string    `json:"device_info"`
	NonceStr       string    `json:"nonce_str"`
	Sign           string    `json:"sign"`
	Body           string    `json:"body"`
	OutTradeNo     string    `json:"out_trade_no"`
	TotalFee       big.Float `json:"total_fee"`
	SpbillCreateIp string    `json:"spbill_create_ip"`
	TimeExpire     string    `json:"time_expire"`
	NotifyUrl      string    `json:"notify_url"`
	BackUrl        string    `json:"back_url"`
	BusiType       int8      `json:"busi_type"`
	TimeStamp      string    `json:"time_stamp"`
}

type Req3013Params struct {
	IDType       string `json:"id_type"`
	IDNo         string `json:"id_no"`
	PatientName  string `json:"patient_name"`
	PatientCard  string `json:"patient_card"`
	CardTypeCode string `json:"card_type_code"`
}

type Req3014Params struct {
	IDType        string `json:"id_type"`
	IDNo          string `json:"id_no"`
	PatientName   string `json:"patient_name"`
	PatientCard   string `json:"patient_card"`
	Sex           string `json:"sex"`
	DOB           string `json:"dob"`
	Mobile        string `json:"mobile"`
	CardTypeCode  string `json:"card_type_code"`
	MaritalStatus string `json:"marital_status"`
	Address       string `json:"address"`
	ContactName   string `json:"contact_name"`
	ContactTelNo  string `json:"contact_tel_no"`
	ContactIDNo   string `json:"contact_id_no"`
	Nation        string `json:"nation"`
	Occupation    string `json:"occupation"`
}

type Req3016Params struct {
	PatientId    string `json:"patient_id"`
	PatientName  string `json:"patient_name"`
	PatientCard  string `json:"patient_card"`
	CardTypeCode string `json:"card_type_code"`
	Sex          string `json:"sex"`
	TelephoneNo  string `json:"telephone_no"`
	IdNo         string `json:"id_no"`
	IdType       string `json:"id_type"`
	PatBirth     string `json:"pat_birth"`
}

type Req1004Params struct {
	PatientID      string `json:"patient_id"`
	DoctorName     string `json:"doctor_name"`
	DepartmentCode string `json:"department_code"`
	StartDate      string `json:"start_date"`
	EndDate        string `json:"end_date"`
}

type Req1005Params struct {
	PatientNo          string `json:"patient_id"`
	QueryDateFlag      string `json:"query_date_flag"`
	OrderApptStartDate string `json:"start_date"`
	OrderApptEndDate   string `json:"end_date"`
}

type Req10015Params struct {
	PatientId        string `json:"patient_id"`
	ScheduleItemCode string `json:"schedule_item_code"`
	TradeDate        string `json:"trade_date"`
	TradeTime        string `json:"trade_time"`
	StartTime        string `json:"start_time"`
	EndTime          string `json:"end_time"`
	LockQueueNo      string `json:"lock_queue_no"`
	DeptName         string `json:"dept_name"`
	DoctorName       string `json:"doctor_name"`
	PatientName      string `json:"patient_name"`
}

type Req10016Params struct {
	ScheduleItemCode string `json:"schedule_item_code"`
	TransactionId    string `json:"transaction_id"`
	LockQueueNo      string `json:"lock_queue_no"`
}

type Req1101Params struct {
	TransactionId    string `json:"transaction_id"`
	ScheduleItemCode string `json:"schedule_item_code"`
	PatientID        string `json:"patient_id"`
	PayModeCode      string `json:"pay_mode_code"`
	PayFee           string `json:"pay_fee"`
	QueueNo          string `json:"queue_no"`
	PayAmt           string `json:"pay_amt"`
	PlatformNo       string `json:"platform_no"`
	OutPayNo         string `json:"out_pay_no"`
	PayChannel       string `json:"pay_channel"`
	POSPayStr        string `json:"pos_pay_str"`
	PayDate          string `json:"pay_date"`
	PayTime          string `json:"pay_time"`
	UpdateBy         string `json:"update_by"`
	AppOrderCode     string `json:"app_order_code"`
}

type Req1104Params struct {
	PatientID string `json:"patient_id"`
	StartDate string `json:"start_date"`
	EndDate   string `json:"end_date"`
}

type Req1003Params struct {
	AdmNo         string `json:"adm_no"`
	TransactionId string `json:"t_id"`
}

type Req3300Params struct {
	PatientId   string `json:"patient_id"`
	PatientName string `json:"patient_name"`
	CardType    string `json:"card_type"`
	IDCardType  string `json:"id_card_type"`
	IDNo        string `json:"id_no"`
	Phone       string `json:"phone"`
}

type Req4902Params struct {
	CardNo    string `json:"card_no"`
	PatientId string `json:"patient_id"`
	StartDate string `json:"start_date"`
	EndDate   string `json:"end_date"`
}

type Req4904Params struct {
	PatientId string `json:"patient_id"`
	CardNo    string `json:"card_no"`
	Adm       string `json:"adm"`
	StartDate string `json:"start_date"`
	EndDate   string `json:"end_date"`
}

type Req4905Params struct {
	CardNo    string `json:"card_no"`
	PatientId string `json:"patient_id"`
	OrderNo   string `json:"order_no"`
	OrderSum  string `json:"order_sum"`
}

type Req4906Params struct {
	PatientId    string `json:"patient_id"`
	CardNo       string `json:"card_no"`
	OrderNo      string `json:"order_no"`
	InvoiceNoStr string `json:"invoice_no_str"`
	PayAmt       string `json:"pay_amt"`
	PlatformNo   string `json:"platform_no"`
	OutPayNo     string `json:"out_pay_no"`
	PayDate      string `json:"pay_date"`
	PayTime      string `json:"pay_time"`
	UpdatedBy    string `json:"updated_by"`
	OrderSn      string `json:"order_sn"`
	PayModeCode  string `json:"pay_mode_code"`
}

type Req4907Params struct {
	CardNo    string `json:"card_no"`
	StartDate string `json:"start_date"`
	EndDate   string `json:"end_date"`
	PatientId string `json:"patient_id"`
	Adm       string `json:"adm"`
}

type Req4908Params struct {
	PatientId string `json:"patient_id"`
	Adm       string `json:"adm"`
	StartDate string `json:"start_date"`
	EndDate   string `json:"end_date"`
	OrderNo   string `json:"order_no"`
	InvoiceNo string `json:"invoice_no"`
}

type Req4910Params struct {
	CardNo       string `json:"card_no"`
	PatientId    string `json:"patient_id"`
	InvoiceNoStr string `json:"invoice_no_str"`
	OrderNo      string `json:"order_no"`
	OrderSn      string `json:"order_sn"`
}

type Req6001Params struct {
	HospitalId   string `json:"hospital_id"`
	StartDate    string `json:"start_date"`
	EndDate      string `json:"end_date"`
	TradeChannel string `json:"trade_channel"`
}

type ReqOpRefundParams struct {
	OrderSn string  `json:"order_sn"`
	Fee     float64 `json:"fee"`
}

type Req5001Params struct {
	TradeCode  string `json:"trade_code"`
	HospitalID string `json:"hospital_id"`
	CardNo     string `json:"card_no"`
	CardType   string `json:"card_type"`
	PatientID  string `json:"patient_id"`
	MedicalNo  string `json:"medical_no"`
	AimFlag    string `json:"aim_flag"`
	UserCode   string `json:"user_code"`
	TerminalID string `json:"terminal_id"`
	StartDate  string `json:"start_date"`
	EndDate    string `json:"end_date"`
	ExpStr     string `json:"exp_str"`
}

type Req5002Params struct {
	TradeCode  string     `json:"trade_code"`
	HospitalId string     `json:"hospital_id"`
	CardNo     string     `json:"card_no"`
	CardType   string     `json:"card_type"`
	SecrityNo  string     `json:"secrity_no"`
	PatientID  string     `json:"patient_id"`
	UserCode   string     `json:"user_code"`
	TerminalID string     `json:"terminal_id"`
	AdmID      string     `json:"adm_id"`
	ExpStr     string     `json:"exp_str"`
	PayDetails PayDetails `json:"pay_details"`
}

type ReqFeeDaily struct {
	TradeCode string `json:"trade_code"`
	AdmID     string `json:"adm_id"`
	BillDate  string `json:"bill_date"`
}

type PayDetails struct {
	XMLName      xml.Name `xml:"PayDetails" json:"-"` // 单张票据
	PayModeCode  string   `xml:"PayModeCode" json:"pay_mode_code"`
	TradeChannel string   `xml:"TradeChannel" json:"trade_channel"`
	PayAccountNo string   `xml:"PayAccountNo" json:"pay_account_no"`
	PayAmt       string   `xml:"PayAmt" json:"pay_amt"`
	PlatformNo   string   `xml:"PlatformNo" json:"platform_no"`
	OutPayNo     string   `xml:"OutPayNo" json:"out_pay_no"`
	PayChannel   string   `xml:"PayChannel" json:"pay_channel"`
	POSPayStr    string   `xml:"POSPayStr" json:"pos_pay_str"`
	PayDate      string   `xml:"PayDate" json:"pay_date"`
	PayTime      string   `xml:"PayTime" json:"pay_time"`
}

type Req5003Params struct {
	TradeCode  string `json:"trade_code"`
	HospitalId string `json:"hospital_id"`
	CardNo     string `json:"card_no"`
	SecrityNo  string `json:"secrity_no"`
	CardType   string `json:"card_type"`
	PatientID  string `json:"patient_id"`
	MedicalNo  string `json:"medical_no"`
	UserCode   string `json:"user_code"`
	TerminalID string `json:"terminal_id"`
	AdmID      string `json:"adm_id"`
	ExpStr     string `json:"exp_str"`
}

type Req32004Data struct {
	DiagnosStatus   string `json:"DiagnosStatus"`
	DiagnosType     string `json:"DiagnosType"`
	ICD10Code       string `json:"ICD10Code"`
	ICD10Desc       string `json:"ICD10Desc"`
	DiagnosDesc     string `json:"DiagnosDesc"`
	MainDiagnosFlag int    `json:"MainDiagnosFlag"`
	DiagnosDoc      string `json:"DiagnosDoc"`
	DiseaseDate     string `json:"DiseaseDate"`
}

type Req32004 struct {
	ClientType   string       `json:"ClientType"`
	CardNo       string       `json:"CardNo"`
	UserCode     string       `json:"UserCode"`
	CardTypeCode string       `json:"CardTypeCode"`
	CardType     int          `json:"CardType"`
	AdmType      string       `json:"AdmType"`
	DocCode      string       `json:"DocCode"`
	LocCode      string       `json:"LocCode"`
	Data         Req32004Data `json:"Data"`
}

type Req32010Data struct {
	ARCIMCode      string `json:"ARCIMCode"`
	OrderPrior     string `json:"OrderPrior"`
	OrderStartDate string `json:"OrderStartDate"`
	OrderStartTime string `json:"OrderStartTime"`
	OrderRecLoc    string `json:"OrderRecLoc"`
	InsuTypeCode   string `json:"InsuTypeCode"`
	OrderPackQty   int    `json:"OrderPackQty"`
	DoseQty        string `json:"DoseQty"`
	DoseUOMCode    string `json:"DoseUOMCode"`
	OrderFreqCode  string `json:"OrderFreqCode"`
	OrderInstrCode string `json:"OrderInstrCode"`
	LabSpec        string `json:"LabSpec"`
}

type Req32010 struct {
	EpisodeID    string         `json:"EpisodeID"`
	UserCode     string         `json:"UserCode"`
	OrderLocCode string         `json:"OrderLocCode"`
	Data         []Req32010Data `json:"Data"`
}

type Req0050Params struct {
	PatientId string `json:"patient_id"`
	StartDate string `json:"start_date"`
	EndDate   string `json:"end_date"`
}

type ReqZgsfyz struct {
	IdNo string `json:"id_no"`
}

type Req11003Params struct {
	CardNo        string `json:"card_no"`
	CardType      string `json:"card_type"`
	StartDate     string `json:"start_date"`
	EndDate       string `json:"end_date"`
	AppMethodCode string `json:"app_method_code"`
	LocCode       string `json:"loc_code"`
	AdmType       string `json:"adm_type"`
	CurrentIH     string `json:"current_ih"`
	Count         string `json:"count"`
	Page          string `json:"page"`
}

type Req11003Xml struct {
	CardType      string `json:"CardType"`
	CardNo        string `json:"CardNo"`
	CardTypeCode  string `json:"CardTypeCode"`
	StartDate     string `json:"StartDate"`
	EndDate       string `json:"EndDate"`
	CurrentIH     string `json:"CurrentIH"`
	AdmType       string `json:"AdmType"`
	IsApp         string `json:"IsApp"`
	AppMethodCode string `json:"AppMethodCode"`
	HospCode      string `json:"HospCode"`
	LocCode       string `json:"LocCode"`
	DocCode       string `json:"DocCode"`
	WardCode      string `json:"WardCode"`
	ClientType    string `json:"ClientType"`
	Count         string `json:"Count"`
	Page          string `json:"Page"`
	PatientName   string `json:"PatientName"`
	RowId         string `json:"RowId"`
}

type Req21001Params struct {
	EpisodeNo  string `json:"episode_no"`
	ClientType string `json:"client_type"`
	StartDate  string `json:"start_date"`
	EndDate    string `json:"end_date"`
	OrderCat   string `json:"order_cat"`
	OEORDLoc   string `json:"oeord_loc"`
	OEORDDoc   string `json:"oeord_doc"`
}

type Req10041 struct {
	TradeCode        string `json:"trade_code"`
	ScheduleItemCode string `json:"schedule_item_code"`
}

type Req5010Params struct {
	TradeCode  string `json:"trade_code"`
	HospitalId string `json:"hospital_id"`
	CardNo     string `json:"card_no"`
	SecrityNo  string `json:"secrity_no"`
	CardType   string `json:"card_type"`
	PatientID  string `json:"patient_id"`
	MedicalNo  string `json:"medical_no"`
	UserCode   string `json:"user_code"`
	TerminalID string `json:"terminal_id"`
	ExpStr     string `json:"exp_str"`
	IDNo       string `json:"id_no"`
	IDType     string `json:"id_type"`
}

type Req5011Params struct {
	TradeCode  string      `json:"trade_code"`
	HospitalId string      `json:"hospital_id"`
	UserCode   string      `json:"user_code"`
	CardNo     string      `json:"card_no"`
	CardType   string      `json:"card_type"`
	SecrityNo  string      `json:"secrity_no"`
	PatientID  string      `json:"patient_id"`
	MedicalNo  string      `json:"medical_no"`
	IPBook     string      `json:"ip_book"`
	PatInfo    string      `json:"pat_info"`
	AdmInfo    AdmInfo5011 `json:"adm_info"`
	ExpStr     string      `json:"exp_str"`
}
type AdmInfo5011 struct {
	AdmReason string `xml:"AdmReason" json:"adm_reason"`
}

type ReqBindBank struct {
	PatientNo      string `json:"PatientNo"`
	BankCode       string `json:"BankCode"`
	BankCardNo     string `json:"BankCardNo"`
	BCPatientName  string `json:"BCPatientName"`
	ReservePhoneNo string `json:"ReservePhoneNo"`
	NoticePhoneNo  string `json:"NoticePhoneNo"`
	UserCode       string `json:"UserCode"`
	ClientType     string `json:"ClientType"`
}

type ReqQueryBank struct {
	CardNo       string `json:"CardNo"`
	ClientType   string `json:"ClientType"`
	CardType     string `json:"CardType"`
	CardTypeCode string `json:"CardTypeCode"`
	PatientName  string `json:"PatientName"`
	HospCode     string `json:"HospCode"`
}

type ReqUnBindBank struct {
	Status     string `json:"Status"`
	BankCardNo string `json:"BankCardNo"`
	PatientNo  string `json:"PatientNo"`
	UserCode   string `json:"UserCode"`
	ClientType string `json:"ClientType"`
}
